<?php
/**
 * <pre>
 * iBoard v1.0
 * 
 * Display forum file
 * </pre>
 * 
 * @copyright	(c) 2010 DiabloStudios
 * @license		GNU Affero GPL v3 or newer
 * @package		PHP-Fusion
 * @subpackage	iBoard
 * @link		http://diablostudios.pl
 * @version     $Id: viewforum.php 11 2011-03-27 16:04:43Z Bartek $
 */

require_once DSB_LANGDIR . "viewforum.php";
require_once DSB_DIR . "includes/functions_forumlist.php";

$fid = intval($dsb->input['forum_id']);
if ($fid < 0)
{
	switch ($fid)
	{
		case "-1":
			$location = FORUM."index.php";
			break;
		case "-2":
			$location = BASEDIR."search.php";
			break;
		case "-3":
			$location = DSB_FDIR."usercp.php";
			break;
		case "-4":
			$location = BASEDIR."messages.php";
			break;
	}
	if ($location)
	{
		header("Location: " . $location);
		exit;
	}
}

// Get forum info
$foruminfo = get_forum($fid);
$forum_cache = $cache->read("forums");

$foruminfo = $forum_cache[$fid];


if (!$foruminfo)
{
	echo error($locale['error_invalidforum']);
}
$currentitem = $fid;
//build_forum_breadcrumb($fid);
$parentlist = $foruminfo['parentlist'];

// To validate, turn & to &amp; but support unicode
$foruminfo['forum_name'] = preg_replace("#&(?!\#[0-9]+;)#si", "&amp;", $foruminfo['forum_name']);

$forumpermissions = forum_permissions();
$fpermissions = $forumpermissions[$fid];

	
    
    /*foreach($forum_cache as $a => $b) {
        echo $a."<br />";
        foreach ($b as $c => $d) {
            echo "&nbsp; &nbsp; &nbsp;".$c." - ".$d."<br />";
        }
    }*/

if ($fpermissions['canview'] != 1)
{
	error_no_permission();
}

if ($dsb->user['uid'] == 0)
{
	// Build a forum cache.
	$query = dbquery("
		SELECT f.*, f2.*
        FROM " . DB_FORUMS . " f
        LEFT JOIN " . DB_DSB_FORUMS . " f2 ON f2.fid=f.forum_id
		WHERE f2.active != 0
		ORDER BY pid, forum_order
	");

	$forumsread = unserialize($dsb->cookies['forumread']);
}
else
{
	// Build a forum cache.
	$query = dbquery("
        SELECT f.*, f2.*, fr.dateline AS lastread
		FROM " . DB_FORUMS . " f
        LEFT JOIN " . DB_DSB_FORUMS . " f2 ON f2.fid=f.forum_id
		LEFT JOIN " . DB_DSB_FORUMSREAD . " fr ON fr.fid=f.forum_id AND fr.uid='" . $dsb->user['user_id'] . "'
        WHERE f2.active != 0
		ORDER BY pid, forum_order
	");
}
while ($forum = dbarray($query))
{
	if ($dsb->user['uid'] == 0)
	{
		if ($forumsread[$forum['fid']])
		{
			$forum['lastread'] = $forumsread[$forum['fid']];
		}
	}
	$fcache[$forum['pid']][$forum['forum_order']][$forum['fid']] = $forum;
}

// Get the forum moderators if the setting is enabled.
if ($dsb->settings['modlist'] != 0)
{
	$moderatorcache = $cache->read("moderators");
}

$bgcolor = "trow1";
if ($dsb->settings['subforumsindex'] != 0)
{
	$showdepth = 3;
}
else
{
	$showdepth = 2;
}
$child_forums = build_forumbits($fid, 2);
$forums = $child_forums['forum_list'];
if ($forums)
{
	$locale['sub_forums_in'] = ds_sprintf($locale['sub_forums_in'], $foruminfo['forum_name']);
	eval("\$subforums = \"" . $templates->get("forumdisplay_subforums") . "\";");
}



if ($foruminfo['linkto'])
{
	header("Location: {$foruminfo['linkto']}");
	exit;
}

// Make forum jump...
if ($dsb->settings['enableforumjump'] != 0)
{
	$forumjump = build_forum_jump("", $fid, 1);
}

if ($foruminfo['type'] == "f" && $foruminfo['open'] != 0)
{
	eval("\$newthread = \"" . $templates->get("forumdisplay_newthread") . "\";");
}

if ($fpermissions['cansearch'] != 0 && $foruminfo['type'] == "f")
{
	eval("\$searchforum = \"" . $templates->get("forumdisplay_searchforum") . "\";");
}

$done_moderators = array("users" => array(), "groups" => array());
$moderators = '';
$parentlistexploded = explode(",", $parentlist);

foreach ($parentlistexploded as $mfid)
{
	// This forum has moderators
	if (is_array($moderatorcache[$mfid]))
	{
		// Fetch each moderator from the cache and format it, appending it to the list
		foreach ($moderatorcache[$mfid] as $modtype)
		{
			foreach ($modtype as $moderator)
			{
				if ($moderator['isgroup'])
				{
					if (in_array($moderator['id'], $done_moderators['groups']))
					{
						continue;
					}
					$moderators .= $comma . htmlspecialchars_uni($moderator['title']);
					$done_moderators['groups'][] = $moderator['id'];
				}
				else
				{
					if (in_array($moderator['id'], $done_moderators['users']))
					{
						continue;
					}
					$moderators .= "{$comma}<a href=\"" . get_profile_link($moderator['id']) . "\">" . htmlspecialchars_uni($moderator['username']) . "</a>";
					$done_moderators['users'][] = $moderator['id'];
				}
				$comma = $lang->comma;
			}
		}
	}
}
$comma = '';

// If we have a moderators list, load the template
if ($moderators)
{
	eval("\$moderatedby = \"" . $templates->get("forumdisplay_moderatedby") . "\";");
}
else
{
	$moderatedby = '';
}

$bgcolor = "trow1";

// Set here to fetch only approved topics (and then below for a moderator we change this).
$visibleonly = "AND visible='1'";
$tvisibleonly = "AND t.visible='1'";

// Check if the active user is a moderator and get the inline moderation tools.
if (is_moderator($fid))
{
	eval("\$inlinemodcol = \"" . $templates->get("forumdisplay_inlinemoderation_col") . "\";");
	$ismod = true;
	$inlinecount = "0";
	$inlinecookie = "inlinemod_forum" . $fid;
	$visibleonly = " AND (thread_hidden='1' OR thread_hidden='0')";
	$tvisibleonly = " AND (t2.visible='1' OR t2.visible='0')";
}
else
{
	$inlinemod = '';
	$ismod = false;
}

if (is_moderator($fid, "caneditposts") || $fpermissions['caneditposts'] == 1)
{
	$can_edit_titles = 1;
}
else
{
	$can_edit_titles = 0;
}

unset($rating);

// Pick out some sorting options.
// First, the date cut for the threads.
$datecut = 0;
if (!$dsb->input['datecut'])
{
	// If the user manually set a date cut, use it.
	if ($dsb->user['daysprune'])
	{
		$datecut = $dsb->user['daysprune'];
	}
	else
	{
		// If the forum has a non-default date cut, use it.
		if (!empty($foruminfo['defaultdatecut']))
		{
			$datecut = $foruminfo['defaultdatecut'];
		}
	}
}
// If there was a manual date cut override, use it.
else
{
	$datecut = intval($dsb->input['datecut']);
}

$datecut = intval($datecut);
$datecutsel[$datecut] = "selected=\"selected\"";
if ($datecut > 0 && $datecut != 9999)
{
	$checkdate = TIME_NOW - ($datecut * 86400);
	$datecutsql = "AND (lastpost >= '$checkdate' OR sticky = '1')";
	$datecutsql2 = "AND (t.thread_lastpost >= '$checkdate' OR t2.sticky = '1')";
}
else
{
	$datecutsql = '';
	$datecutsql2 = '';
}

// Pick the sort order.
if (!isset($dsb->input['order']) && !empty($foruminfo['defaultsortorder']))
{
	$dsb->input['order'] = $foruminfo['defaultsortorder'];
}

$dsb->input['order'] = htmlspecialchars($dsb->input['order']);

switch (my_strtolower($dsb->input['order']))
{
	case "asc":
		$sortordernow = "asc";
		$ordersel['asc'] = "selected=\"selected\"";
		$oppsort = $locale['desc'];
		$oppsortnext = "desc";
		break;
	default:
		$sortordernow = "desc";
		$ordersel['desc'] = "selected=\"selected\"";
		$oppsort = $locale['asc'];
		$oppsortnext = "asc";
		break;
}

// Sort by which field?
if (!isset($dsb->input['sortby']) && !empty($foruminfo['defaultsortby']))
{
	$dsb->input['sortby'] = $foruminfo['defaultsortby'];
}

$t = "t.";

$sortby = htmlspecialchars($dsb->input['sortby']);
switch ($dsb->input['sortby'])
{
	case "subject":
		$sortfield = "subject";
		break;
	case "replies":
		$sortfield = "replies";
		break;
	case "views":
		$sortfield = "views";
		break;
	case "starter":
		$sortfield = "username";
		break;
	case "rating":
		$t = "";
		$sortfield = "averagerating";
		$sortfield2 = ", t.totalratings DESC";
		break;
	case "started":
		$sortfield = "dateline";
		break;
	default:
		$sortby = "thread_lastpost";
		$sortfield = "thread_lastpost";
		$dsb->input['sortby'] = "lastpost";
		break;
}

$sortsel[$dsb->input['sortby']] = "selected=\"selected\"";

// Pick the right string to join the sort URL
if ($dsb->settings['seourls'] == "yes" || ($dsb->settings['seourls'] == "auto" && $_SERVER['SEO_SUPPORT'] == 1))
{
	$string = "?";
}
else
{
	$string = "&amp;";
}

// Are we viewing a specific page?
if (isset($dsb->input['page']) && is_numeric($dsb->input['page']))
{
	$sorturl = get_forum_link($fid, $dsb->input['page']) . $string . "datecut=$datecut";
}
else
{
	$sorturl = get_forum_link($fid) . $string . "datecut=$datecut";
}
eval("\$orderarrow['$sortby'] = \"" . $templates->get("forumdisplay_orderarrow") . "\";");

$threadcount = 0;
$useronly = $tuseronly = "";
if ($fpermissions['canonlyviewownthreads'] == 1)
{
	$useronly = "AND thread_author={$dsb->user['user_id']}";
	$tuseronly = "AND t.thread_author={$dsb->user['user_id']}";
}

if ($fpermissions['canviewthreads'] != 0)
{

	// How many posts are there?
	if ($datecut > 0 || $fpermissions['canonlyviewownthreads'] == 1)
	{
		$query = dbquery("SELECT COUNT(tid) AS threads FROM ".DB_DSB_THREADS." WHERE fid = '$fid' $useronly $visibleonly $datecutsql");
		$threadcount = dbfetchfield($query, "threads");
	}
	else
	{
		$query = dbquery("SELECT forum_threadcount AS threads FROM " . DB_FORUMS . " WHERE forum_id = '{$fid}' LIMIT 1");
		$forum_threads = dbarray($query);
		$threadcount = $forum_threads['threads'];

		// If we have 0 threads double check there aren't any "moved" threads
		if ($threadcount == 0)
		{
			$query = dbquery("SELECT COUNT(thread_id) AS threads FROM " . DB_THREADS . " WHERE forum_id = '$fid' $useronly $visibleonly LIMIT 1");
			$threadcount = dbfetchfield($query, "threads");
		}
	}
}


// How many pages are there?
if(!$dsb->settings['threadsperpage'])
{
	$dsb->settings['threadsperpage'] = 20;
}

$perpage = $dsb->settings['threadsperpage'];

if(intval($dsb->input['page']) > 0)
{
	$page = intval($dsb->input['page']);
	$start = ($page-1) * $perpage;
	$pages = $threadcount / $perpage;
	$pages = ceil($pages);
	if($page > $pages || $page <= 0)
	{
		$start = 0;
		$page = 1;
	}
}
else
{
	$start = 0;
	$page = 1;
}

$end = $start + $perpage;
$lower = $start + 1;
$upper = $end;

if($upper > $threadcount)
{
	$upper = $threadcount;
}

// Assemble page URL
if($dsb->input['sortby'] || $dsb->input['order'] || $dsb->input['datecut']) // Ugly URL
{	
	$page_url = str_replace("{fid}", $fid, FORUM_URL_PAGED);
	
	if($dsb->settings['seourls'] == "yes" || ($dsb->settings['seourls'] == "auto" && $_SERVER['SEO_SUPPORT'] == 1))
	{
		$q = "?";
		$and = '';
	}
	else
	{
		$q = '';
		$and = "&";
	}
	
	if($sortby != "lastpost")
	{
		$page_url .= "{$q}{$and}sortby={$sortby}";
		$q = '';
		$and = "&";
	}
	
	if($sortordernow != "desc")
	{
		$page_url .= "{$q}{$and}order={$sortordernow}";
		$q = '';
		$and = "&";
	}
	
	if($datecut > 0 && $datecut != 9999)
	{
		$page_url .= "{$q}{$and}datecut={$datecut}";
	}
}
else
{
	$page_url = str_replace("{fid}", $fid, FORUM_URL_PAGED);
}

$multipage = multipage($threadcount, $perpage, $page, $page_url);


if($foruminfo['allowtratings'] != 0 && $fpermissions['canviewthreads'] != 0)
{
	require_once DSB_LANGDIR . "ratings.php";
	$ratingadd = "(t2.totalratings/t2.numratings) AS averagerating, ";

	$lpbackground = "trow2";
	eval("\$ratingcol = \"".$templates->get("forumdisplay_threadlist_rating")."\";");
	eval("\$ratingsort = \"".$templates->get("forumdisplay_threadlist_sortrating")."\";");
	$colspan = "7";
	$select_voting = "\nLEFT JOIN ".DB_DSB_THREADR." r ON(r.tid=t.thread_id AND r.uid='{$dsb->user['user_id']}')";
	$select_rating_user = "r.uid AS rated, ";
}
else
{
	if($sortfield == "averagerating")
	{
		$t = "t.";
		$sortfield = "thread_lastpost";
	}
	$ratingadd = '';
	$lpbackground = "trow1";
	$colspan = "6";
}


if($ismod)
{
	++$colspan;
}

// Get Announcements
$limit = '';
$announcements = '';
if($dsb->settings['announcementlimit'])
{
	$limit = "LIMIT 0, ".$dsb->settings['announcementlimit'];
}


$sql = build_parent_list($fid, "fid", "OR", $parentlist);
$time = TIME_NOW;
$query = dbquery("
	SELECT a.*, u.user_name
	FROM ".DB_DSB_ANNOUNCEMENTS." a
	LEFT JOIN ".DB_USERS." u ON (u.user_id=a.uid)
	WHERE a.startdate<='$time' AND (a.enddate>='$time' OR a.enddate='0') AND ($sql OR fid='-1')
	ORDER BY a.startdate DESC $limit
");
//$bgcolor = alt_trow(true); // Reset the trow colors

while($announcement = dbarray($query))
{
	if($announcement['startdate'] > $dsb->user['lastvisit'])
	{
		$new_class = ' class="subject_new"';
		$folder = "newfolder";
	}
	else
	{
		$new_class = ' class="subject_old"';
		$folder = "folder";
	}

	$announcement['announcementlink'] = get_announcement_link($announcement['aid']);
	$announcement['subject'] = censorwords($announcement['subject']);
	$announcement['subject'] = htmlspecialchars_uni($announcement['subject']);
	$postdate = my_date($dsb->settings['dateformat'], $announcement['startdate']);
	$posttime = my_date($dsb->settings['timeformat'], $announcement['startdate']);
	$announcement['profilelink'] = build_profile_link($announcement['username'], $announcement['uid']);
	
	if($foruminfo['allowtratings'] != 0 && $fpermissions['canviewthreads'] != 0)
	{
		eval("\$rating = \"".$templates->get("forumdisplay_announcement_rating")."\";");
		$lpbackground = "trow2";
	}
	else
	{
		$rating = '';
		$lpbackground = "trow1";
	}
	
	if($ismod)
	{
		eval("\$modann = \"".$templates->get("forumdisplay_announcements_announcement_modbit")."\";");
	}
	else
	{
		$modann = '';
	}
	
	eval("\$announcements .= \"".$templates->get("forumdisplay_announcements_announcement")."\";");
	$bgcolor = alt_trow();
}

if($announcements)
{
	eval("\$announcementlist = \"".$templates->get("forumdisplay_announcements")."\";");
	$shownormalsep = true;
}

$icon_cache = $cache->read("posticons");

if($fpermissions['canviewthreads'] != 0)
{
	// Start Getting Threads
	$query = dbquery("
		SELECT t.*, t2.*, p.displaystyle AS threadprefix, {$ratingadd}{$select_rating_user}u.user_name AS threadusername, u.user_name
		FROM ".DB_THREADS." t
        LEFT JOIN ".DB_DSB_THREADS." t2 ON (t2.tid = t.thread_id)
		LEFT JOIN ".DB_USERS." u ON (u.user_id = t.thread_id){$select_voting}
		LEFT JOIN ".DB_DSB_THREADSP." p ON (p.pid = t2.prefix)
		WHERE t.forum_id='$fid' $tuseronly $tvisibleonly $datecutsql2
		ORDER BY t.thread_sticky DESC, {$t}{$sortfield} $sortordernow $sortfield2
		LIMIT $start, $perpage
	");
	while($thread = dbarray($query))
	{		
		$threadcache[$thread['tid']] = $thread;

		// If this is a moved thread - set the tid for participation marking and thread read marking to that of the moved thread
		if(substr($thread['closed'], 0, 5) == "moved")
		{
			$tid = substr($thread['closed'], 6);
			if(!$tids[$tid])
			{
				$moved_threads[$tid] = $thread['tid'];
				$tids[$thread['tid']] = $tid;
			}
		}
		// Otherwise - set it to the plain thread ID
		else
		{
			$tids[$thread['tid']] = $thread['tid'];
			if($moved_threads[$tid])
			{
				unset($moved_threads[$tid]);
			}
		}
	}
}
else
{
	$threadcache = $tids = null;
}


// If user has moderation tools available, prepare the Select All feature
$num_results = dbnumrows($query);
if(is_moderator($fid) && $num_results > 0)
{
	$lang->page_selected = ds_sprintf($lang->page_selected, intval($num_results));
	$lang->select_all = ds_sprintf($lang->select_all, intval($threadcount));
	$lang->all_selected = ds_sprintf($lang->all_selected, intval($threadcount));
	eval("\$selectall = \"".$templates->get("forumdisplay_inlinemoderation_selectall")."\";");
}

if($tids)
{
	$tids = implode(",", $tids);
}

// Check participation by the current user in any of these threads - for 'dot' folder icons
if($dsb->settings['dotfolders'] != 0 && $dsb->user['uid'] && $threadcache)
{
	$query = $db->simple_select("posts", "tid,uid", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})");
	while($post = $db->fetch_array($query))
	{
		if($moved_threads[$post['tid']])
		{
			$post['tid'] = $moved_threads[$post['tid']];
		}
		if($threadcache[$post['tid']])
		{
			$threadcache[$post['tid']]['doticon'] = 1;
		}
	}
}


// Read threads
if($dsb->user['uid'] && $dsb->settings['threadreadcut'] > 0 && $threadcache)
{
	$query = $db->simple_select("threadsread", "*", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})"); 
	while($readthread = $db->fetch_array($query))
	{
		if($moved_threads[$readthread['tid']]) 
		{ 
	 		$readthread['tid'] = $moved_threads[$readthread['tid']]; 
	 	}
		if($threadcache[$readthread['tid']])
		{
	 		$threadcache[$readthread['tid']]['lastread'] = $readthread['dateline']; 
		}
	}
}


if($mybb->settings['threadreadcut'] > 0 && $mybb->user['uid'])
{
	$query = $db->simple_select("forumsread", "dateline", "fid='{$fid}' AND uid='{$mybb->user['uid']}'");
	$forum_read = $db->fetch_field($query, "dateline");

	$read_cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24;
	if($forum_read == 0 || $forum_read < $read_cutoff)
	{
		$forum_read = $read_cutoff;
	}
}
else
{
	$forum_read = my_get_array_cookie("forumread", $fid);
}

$unreadpost = 0;
$threads = '';
$load_inline_edit_js = 0;

if(is_array($threadcache))
{
	foreach($threadcache as $thread)
	{
        
        // Set folder of the thread icons
        if ($settings['thread_img_theme'] == "1") {
            $imgtdir = THEME."forum/";
        } else {
            $imgtdir = DSB_DIR."images/forum/";
        }
        
		$moved = explode("|", $thread['closed']);

		if($thread['visible'] == 0)
		{
			$bgcolor = "trow_shaded";
		}
		else
		{
			//$bgcolor = alt_trow();
		}
		
		if($thread['sticky'] == 1)
		{
			$thread_type_class = " forumdisplay_sticky";
		}
		else
		{
			$thread_type_class = " forumdisplay_regular";
		}

		$folder = '';
		$prefix = '';

		$thread['author'] = $thread['uid'];
		if(!$thread['username'])
		{
			$thread['username'] = $thread['threadusername'];
			$thread['profilelink'] = $thread['threadusername'];
		}
		else
		{
			$thread['profilelink'] = build_profile_link($thread['username'], $thread['uid']);
		}
		
		// If this thread has a prefix, insert a space between prefix and subject
		if($thread['prefix'] != 0)
		{
			$thread['threadprefix'] .= '&nbsp;';
		}

		$thread['subject'] = censorwords($thread['subject']);
		$thread['subject'] = htmlspecialchars_uni($thread['subject']);

		if($thread['icon'] > 0 && $icon_cache[$thread['icon']])
		{
			$icon = $icon_cache[$thread['icon']];
			$icon = "<img src=\"{$icon['path']}\" alt=\"{$icon['name']}\" />";
		}
		else
		{
			$icon = "&nbsp;";
		}

		$prefix = '';
		if($thread['poll'])
		{
			$prefix = $lang->poll_prefix;
		}

		if($thread['sticky'] == "1" && !$donestickysep)
		{
			eval("\$threads .= \"".$templates->get("forumdisplay_sticky_sep")."\";");
			$shownormalsep = true;
			$donestickysep = true;
		}
		else if($thread['sticky'] == 0 && $shownormalsep)
		{
			eval("\$threads .= \"".$templates->get("forumdisplay_threads_sep")."\";");
			$shownormalsep = false;
		}

		$rating = '';
		if($foruminfo['allowtratings'] != 0)
		{
			if($moved[0] == "moved")
			{
				$rating = "<td class=\"{$bgcolor}\" style=\"text-align: center;\">-</td>";
			}
			else
			{
				$thread['averagerating'] = floatval(round($thread['averagerating'], 2));
				$thread['width'] = intval(round($thread['averagerating']))*20;
				$thread['numratings'] = intval($thread['numratings']);

				$not_rated = '';
				if(!$thread['rated'])
				{
					$not_rated = ' star_rating_notrated';
				}

				$ratingvotesav = $lang->sprintf($lang->rating_votes_average, $thread['numratings'], $thread['averagerating']);
				eval("\$rating = \"".$templates->get("forumdisplay_thread_rating")."\";");
			}
		}

		$thread['pages'] = 0;
		$thread['multipage'] = '';
		$threadpages = '';
		$morelink = '';
		$thread['posts'] = $thread['replies'] + 1;

		if(!$dsb->settings['postsperpage'])
		{
			$dsb->settings['postperpage'] = 20;
		}

		if($thread['unapprovedposts'] > 0 && $ismod)
		{
			$thread['posts'] += $thread['unapprovedposts'];
		}

		if($thread['posts'] > $dsb->settings['postsperpage'])
		{
			$thread['pages'] = $thread['posts'] / $dsb->settings['postsperpage'];
			$thread['pages'] = ceil($thread['pages']);

			if($thread['pages'] > 5)
			{
				$pagesstop = 4;
				$page_link = get_thread_link($thread['tid'], $thread['pages']);
				eval("\$morelink = \"".$templates->get("forumdisplay_thread_multipage_more")."\";");
			}
			else
			{
				$pagesstop = $thread['pages'];
			}

			for($i = 1; $i <= $pagesstop; ++$i)
			{
				$page_link = get_thread_link($thread['tid'], $i);
				eval("\$threadpages .= \"".$templates->get("forumdisplay_thread_multipage_page")."\";");
			}

			eval("\$thread['multipage'] = \"".$templates->get("forumdisplay_thread_multipage")."\";");
		}
		else
		{
			$threadpages = '';
			$morelink = '';
			$thread['multipage'] = '';
		}

		if($ismod)
		{
			if(my_strpos($mybb->cookies[$inlinecookie], "|{$thread['tid']}|"))
			{
				$inlinecheck = "checked=\"checked\"";
				++$inlinecount;
			}
			else
			{
				$inlinecheck = '';
			}

			$multitid = $thread['tid'];
			eval("\$modbit = \"".$templates->get("forumdisplay_thread_modbit")."\";");
		}
		else
		{
			$modbit = '';
		}

		if($moved[0] == "moved")
		{
			$prefix = $lang->moved_prefix;
			$thread['tid'] = $moved[1];
			$thread['replies'] = "-";
			$thread['views'] = "-";
		}

		$thread['threadlink'] = get_thread_link($thread['tid']);
		$thread['lastpostlink'] = get_thread_link($thread['tid'], 0, "lastpost");

		// Determine the folder
		$folder = '';
		$folder_label = '';

		if($thread['doticon'])
		{
			$folder = "dot_";
			$folder_label .= $lang->icon_dot;
		}

		$gotounread = '';
		$isnew = 0;
		$donenew = 0;

		if($dsb->settings['threadreadcut'] > 0 && $dsb->user['uid'] && $thread['forum_lastpost'] > $forum_read)
		{
			if($thread['lastread'])
			{
				$last_read = $thread['lastread'];
			}
			else
			{
				$last_read = $read_cutoff;
			}
		}
		else
		{
			$last_read = my_get_array_cookie("threadread", $thread['tid']);
		}

		if($forum_read > $last_read)
		{
			$last_read = $forum_read;
		}

		if($thread['lastpost'] > $last_read && $moved[0] != "moved")
		{
			$folder .= "new";
			$folder_label .= $lang->icon_new;
			$new_class = "subject_new";
			$thread['newpostlink'] = get_thread_link($thread['tid'], 0, "newpost");
			eval("\$gotounread = \"".$templates->get("forumdisplay_thread_gotounread")."\";");
			$unreadpost = 1;
		}
		else
		{
			$folder_label .= $lang->icon_no_new;
			$new_class = "subject_old";
		}

		if($thread['replies'] >= $mybb->settings['hottopic'] || $thread['views'] >= $mybb->settings['hottopicviews'])
		{
			$folder .= "hot";
			$folder_label .= $lang->icon_hot;
		}

		if($thread['closed'] == 1)
		{
			$folder .= "lock";
			$folder_label .= $lang->icon_lock;
		}

		if($moved[0] == "moved")
		{
			$folder = "move";
			$gotounread = '';
		}

		$folder .= "folder";

		$inline_edit_tid = $thread['tid'];

		// If this user is the author of the thread and it is not closed or they are a moderator, they can edit
		if(($thread['uid'] == $mybb->user['uid'] && $thread['closed'] != 1 && $mybb->user['uid'] != 0 && $can_edit_titles == 1) || $ismod == true)
		{
			$inline_edit_class = "subject_editable";
		}
		else
		{
			$inline_edit_class = "";
		}
		$load_inline_edit_js = 1;

		$lastpostdate = my_date($dsb->settings['dateformat'], $thread['thread_lastpost']);
		$lastposttime = my_date($dsb->settings['timeformat'], $thread['thread_lastpost']);
		$lastposter = $thread['user_name'];
		$lastposteruid = $thread['thread_author'];

		// Don't link to guest's profiles (they have no profile).
		if($lastposteruid == 0)
		{
			$lastposterlink = $lastposter;
		}
		else
		{
			$lastposterlink = profile_link($lastposteruid, $lastposter,'');
		}

		$thread['replies'] = my_number_format($thread['replies']);
		$thread['views'] = my_number_format($thread['views']);

		// Threads and posts requiring moderation
		if($thread['unapprovedposts'] > 0 && $ismod)
		{
			if($thread['unapprovedposts'] > 1)
			{
				$unapproved_posts_count = $lang->sprintf($lang->thread_unapproved_posts_count, $thread['unapprovedposts']);
			}
			else
			{
				$unapproved_posts_count = $lang->sprintf($lang->thread_unapproved_post_count, 1);
			}

			$unapproved_posts = " <span title=\"{$unapproved_posts_count}\">(".my_number_format($thread['unapprovedposts']).")</span>";
		}
		else
		{
			$unapproved_posts = '';
		}

		// If this thread has 1 or more attachments show the papperclip
		if($thread['attachmentcount'] > 0)
		{
			if($thread['attachmentcount'] > 1)
			{
				$attachment_count = $lang->sprintf($lang->attachment_count_multiple, $thread['attachmentcount']);
			}
			else
			{
				$attachment_count = $lang->attachment_count;
			}

			eval("\$attachment_count = \"".$templates->get("forumdisplay_thread_attachment_count")."\";");
		}
		else
		{
			$attachment_count = '';
		}

		eval("\$threads .= \"".$templates->get("forumdisplay_thread")."\";");
	}

	$customthreadtools = '';
	if($ismod)
	{
		$query = dbquery("SELECT tid,name FROM ".DB_DSB_MODTOOLS." WHERE (CONCAT(',',forums,',') LIKE '%,$fid,%' OR CONCAT(',',forums,',') LIKE '%,-1,%' OR forums='') AND type = 't'");
		while($tool = dbarray($query))
		{
			eval("\$customthreadtools .= \"".$templates->get("forumdisplay_inlinemoderation_custom_tool")."\";");
		}
		
		if(!empty($customthreadtools))
		{
			eval("\$customthreadtools = \"".$templates->get("forumdisplay_inlinemoderation_custom")."\";");
		}
		eval("\$inlinemod = \"".$templates->get("forumdisplay_inlinemoderation")."\";");
	}
}

// If there are no unread threads in this forum and no unread child forums - mark it as read
if(fetch_unread_count($fid) == 0 && $unread_forums == 0)
{
	mark_forum_read($fid);
}


// Subscription status
$query = dbquery("SELECT fid FROM ".DB_DSB_FORUMSUBSCRIPTIONS." WHERE fid='".$fid."' AND uid='{$dsb->user['user_id']}' LIMIT 1");
if(dbfetchfield($query, 'fid'))
{
	$add_remove_subscription = 'remove';
	$add_remove_subscription_text = $lang->unsubscribe_forum;
}
else
{
	$add_remove_subscription = 'add';
	$add_remove_subscription_text = $lang->subscribe_forum;
}


// Is this a real forum with threads?
if($foruminfo['type'] != "c")
{
	if(!$threadcount)
	{
		eval("\$threads = \"".$templates->get("forumdisplay_nothreads")."\";");
	}

	if($foruminfo['password'] != '')
	{
		eval("\$clearstoredpass = \"".$templates->get("forumdisplay_threadlist_clearpass")."\";");
	}

	if($load_inline_edit_js == 1)
	{
		eval("\$inline_edit_js = \"".$templates->get("forumdisplay_threadlist_inlineedit_js")."\";");
	}



	$lang->rss_discovery_forum = ds_sprintf($lang->rss_discovery_forum, htmlspecialchars_uni(strip_tags($foruminfo['name'])));
	eval("\$rssdiscovery = \"".$templates->get("forumdisplay_rssdiscovery")."\";");
	eval("\$threadslist = \"".$templates->get("forumdisplay_threadlist")."\";");
}
else
{
	$rssdiscovery = '';
	$threadslist = '';

	if(empty($forums))
	{
		error($lang->error_containsnoforums);
	}
}




//Make forum name
$foruminfo['name'] = strip_tags($foruminfo['name']);

//Prepare the template
eval("\$forums = \"".$templates->get("forumdisplay")."\";");

//Display page
output_page($forums);

?>